// request.js
import { ref } from 'vue';

// 创建一个全局的请求基础配置
const defaultConfig = {
    baseURL: '/ym-api', // 基础URL
    timeout: 10000, // 超时时间，单位是毫秒
    headers: {
        'Content-Type': 'application/json', // 默认 Content-Type
        // Authorization: '', // 可以设置默认的 Authorization
    },
    // 其他你需要的配置...
};

// 请求拦截器
const requestInterceptors = (config) => {
    // 在请求发出前对配置进行修改
    // 例如：添加token
    let token = uni.getStorageSync('token');
    if (token) {
        config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
};

// 响应拦截器
const responseInterceptors = (res) => {
    // 对响应数据做点什么
    console.log(res);

    if (res.statusCode === 200) {
        return res.data;
    } else {
        // 处理错误情况
        throw new Error(res.errMsg);
    }
};

// 请求方法
const request = (url, method, data, config = {}) => {
    let finalConfig = { ...defaultConfig, ...config };

    // 添加拦截器
    if (requestInterceptors) {
        finalConfig = requestInterceptors(finalConfig);
    }
    if (method === 'GET') {
        url += data;
    }

    return new Promise((resolve, reject) => {
        uni.request({
            url: defaultConfig.baseURL + url,
            method,
            data,
            header: finalConfig.headers,
            timeout: finalConfig.timeout,
            success: (res) => {
                // 添加响应拦截器
                if (responseInterceptors) {
                    try {
                        const responseData = responseInterceptors(res);
                        resolve(responseData);
                    } catch (error) {
                        reject(error);
                    }
                } else {
                    resolve(res.data);
                }
            },
            fail: (err) => {
                reject(err);
            },
        });
    });
};

export default {
    get: (url, params = {}, config = {}) => {
        let urlWithParams = '';
        if (params) {
            urlWithParams = `?${Object.keys(params)
                .map((key) => `${key}=${encodeURIComponent(params[key])}`)
                .join('&')}`;
        }
        return request(url, 'GET', urlWithParams, config);
    },
    post: (url, data = {}, config = {}) => {
        return request(url, 'POST', data, config);
    },
    put: (url, data = {}, config = {}) => {
        return request(url, 'PUT', data, config);
    },
    delete: (url, data = {}, config = {}) => {
        return request(url, 'DELETE', data, config);
    },
    // 可以根据需要添加更多HTTP方法
};
